package com.spring.util;

import org.aopalliance.intercept.Joinpoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;

/**
 * 日志通知对象
 * 把刚刚共有逻辑抽取出来
 *
 */
@Component("logAdvisor")
public class LogAdvisor {
    /**
     * 前置通知  增强
     */
    public void before(){
        System.out.println("方法之前运行的共有逻辑");
    }
    /**
     * 后置通知  增强
     */
    public void after() {
        System.out.println("方法之后运行的共有逻辑");
    }
    /**
     * 异常通知
     */
    public void throwing(){
        System.out.println("方法异常运行的共有逻辑");
    }
    /**
     * 最终通知
     */
    public void finallyx(){
        System.out.println("无论如何最后都要执行运行的共有逻辑");
    }

    /**
     * 环绕通知
     */
    public void around(ProceedingJoinPoint pjp){
        try {
            System.out.println("方法之前运行的共有逻辑");
            pjp.proceed();
            System.out.println("方法之后运行的共有逻辑");
        } catch (Throwable throwable) {
            System.out.println("方法异常运行的共有逻辑");
            throwable.printStackTrace();
        } finally {
            System.out.println("无论如何最后都要执行运行的共有逻辑");
        }
    }
}
